#! /usr/bin/env python
"""
    这是控制接口线程的管理器，这个管理器用于开启/停止进程，同时存在一个队列来实现和进程之间信息的交换
    对外界（subscribeManager）提供多个接口，这些接口用于对于线程的通信。
    此外，该管理器还应该提供一个串口的对象，用于让线程从中读写数据
"""
from time import sleep
from queue import Queue
from hwThread import HWThread
import serial

import rospy

class HWThreadManager():

    def __init__(self):
        #创建线程之间通信的队列
        self.queue = Queue(5)
        #创建串口对象，开启串口
        '''
        SerialName: /dev/ttyUSB0
        SerialBaudrate: 4800
        '''
        ser = serial.Serial(port=rospy.get_param("SerialName","/dev/ttyUSB0"), baudrate=rospy.get_param("SerialBaudrate",115200), bytesize=8, parity='N', stopbits=1, timeout=2,rtscts=True,dsrdtr=True)
        ser.isOpen()   
        # res=ser.readall()
        self.serial = ser
        # self.serial = None
        #创建线程对象并且开启线程
        self.hwThread = HWThread(self.queue,self.serial)
        self.hwThread.start()

    def updateArm(self,cmd):
        #这里将信息写入队列
        #在写入队列的时候，由于对方线程在读取的时候并不知道这属于数据的哪一部分，因此将所有的信息打包进入字典
        #该字典存在有两个key:name和data  其中name用于说明这个数据属于整个数据的哪一部分，data说明数据的值
        cmdDic = {}
        cmdDic["name"] = "arm"
        cmdDic["data"] = cmd
        self.queue.put(cmdDic)

    def updateCar(self,cmd):
        #这里将信息写入队列
        cmdDic = {}
        cmdDic["name"] = "car"
        cmdDic["data"] = cmd
        self.queue.put(cmdDic)

    def updateShoot(self,cmd):
        cmdDic = {}
        cmdDic["name"] = "shoot"
        cmdDic["data"] = cmd
        self.queue.put(cmdDic)

    def updateLock(self,cmd):
        cmdDic = {}
        cmdDic["name"] = "lock"
        cmdDic["data"] = cmd
        self.queue.put(cmdDic)


    



